package ui.model;

import java.util.ArrayList;
import java.util.List;

public abstract class ViewModel {

	// 监听者列表
	List<IOnViewModelUpated> listeners = null;

	public ViewModel() {
		this.listeners = new ArrayList<IOnViewModelUpated>();
	}
	
	// 触发视图模型更新事件
	public void fireOnUpdated() {

		List<ModelErrorInfo> errs = verifyModel();
		// 检验视图模型是否正确
		if (errs == null || errs.size() == 0) {// 视图模型正确

			// 回调每一个监听者的onUpdated方法
			for (int i = 0; i < listeners.size(); i++) {
				listeners.get(i).onUpdated(this);
			}
		} else {// 视图模型不正确;

			// 回调每一个监听者的onViewModelInError方法
			for (int i = 0; i < listeners.size(); i++) {
				listeners.get(i).onViewModelInError(errs);
			}
		}
	}

	/*
	 * 检验模型，将出错属性及对应的错误消息构造ModelErrorInfo对象， 形成列表返回, 如果模型正确则返回null
	 */
	public abstract List<ModelErrorInfo> verifyModel();

	// 增加一个监听者
	public void addListener(IOnViewModelUpated aListener) {
		listeners.add(aListener);
	}

	// 删除一个监听者
	public Boolean removeListener(IOnViewModelUpated aListener) {
		return listeners.remove(aListener);
	}

	// 查找一个监听者
	public int findListener(IOnViewModelUpated aListener) {
		return listeners.indexOf(aListener);
	}


}
